package base;

import java.util.GregorianCalendar;

/**
 *Clase que representa a un empleado de la empresa con formación técnica.
 * @author Efren
 * @version 0.0.1
 */
public class Empleado {
    private int idEmpleado;
    private String nombre;
    private String primerApellido;
    private String segundoApellido;
    private GregorianCalendar fechaAlta;
    private GregorianCalendar fechaBaja;

    public int getIdEmpleado() {
        return idEmpleado;
    }

    public void setIdEmpleado(int idEmpleado) {
        this.idEmpleado = idEmpleado;
    }

    public String getNombre() {
        return nombre;
    }

    public void setNombre(String nombre) {
        this.nombre = nombre;
    }

    public String getPrimerApellido() {
        return primerApellido;
    }

    public void setPrimerApellido(String primerApellido) {
        this.primerApellido = primerApellido;
    }

    public String getSegundoApellido() {
        return segundoApellido;
    }

    public void setSegundoApellido(String segundoApellido) {
        this.segundoApellido = segundoApellido;
    }

    public GregorianCalendar getFechaAlta() {
        return fechaAlta;
    }

    public void setFechaAlta(GregorianCalendar fechaAlta) {
        this.fechaAlta = fechaAlta;
    }

    public GregorianCalendar getFechaBaja() {
        return fechaBaja;
    }

    public void setFechaBaja(GregorianCalendar fechaBaja) {
        this.fechaBaja = fechaBaja;
    }
    /**
     * Método que recoge la acción del técnico al estimar una petición de un cliente para generar un presupuesto orientativo.
     * @param peticion Petición a estimar.
     * @param serviciosEstimados Servicios estimados para dicha petición
     * @return Objeto del tipo presupuesto con el presupuesto generado.
     */
    public Presupuesto estimar(Peticion peticion, Servicio[] serviciosEstimados){
        Presupuesto presupuesto = new Presupuesto();
        presupuesto.setIdPresupuesto(peticion.getIdPeticion());
        presupuesto.setServiciosEstimados(serviciosEstimados);
        presupuesto.setFecha(new GregorianCalendar());
        presupuesto.setIdTecnicoResponsable(idEmpleado);
        return presupuesto;
    }

    public Aviso finalizarTarea(Tarea tarea, String anotaciones){
        Aviso aviso = new Aviso();
        tarea.setEstado(Estado.FINALIZADO);
        aviso.setIdTarea(tarea.getIdTarea());
        aviso.setDescripcion("El equipo esta listo para la recogida. Información Adicional: " + (anotaciones==null?"Ninguna.":anotaciones));
        return aviso;
    }
    public Aviso reconsideraServicios(Tarea tarea, String motivos, Servicio[] nuevosServicios){
        Aviso aviso = new Aviso();
        tarea.setEstado(Estado.ECONFIRMACION);
        aviso.setIdTarea(tarea.getIdTarea());
        String mensaje = "Cambio de servicios previstos. Información Adicional: " + (motivos==null?"Ninguna.":motivos) + "\n" + "Nuevos servicios: ";
        float total = 0;
        for (Servicio temp : nuevosServicios){
            mensaje += "Nombre: " + temp.getNombre() + " Descripción: " + temp.getDescripcion() + " Precio: " + temp.getPrecio();
            total += temp.getPrecio();
        }
        mensaje += "Nuevo precio total: " + ((total*Factura.IVA)+total);
        aviso.setDescripcion(mensaje);
        return aviso;
    }
    public static Empleado asignarSiguienteTarea(){
        //TODO obtener el tecnico con menos trabajo pendiente según criterios
        return new Empleado();
    }
}
